#ifndef __PID_H__
#define __PID_H__


/*PID 控制结构体 */
typedef struct
{
    float last_input;   // 上次输入值
    float input;        // 输入值
    float setpoint;     // 设定值

    //固定配置参数
    float Max_integral; //积分限幅
    float Min_integral; //积分限幅
    float Max_output;   //输出限幅
    float Min_output;   //输出限幅

    float Kp; // 比例系数
    float Ki; // 积分系数
    float Kd; // 微分系数

    //动态缓存区域
    float error_val;        // 误差值
    float error_integral;   // 误差积分值
    float error_derivative; // 误差微分值
    
    float output; // 输出值
    float last_output; // 上次输出值

} PID_Ctrl_t;

/*声明PID控制结构体*/
extern PID_Ctrl_t PID_User;

void PID_Init(PID_Ctrl_t* Ptr ,float setpoint,float p, float i, float d, float max_output, float min_output, float max_integral, float min_integral);
void PID_Ctrl(PID_Ctrl_t* Ptr);

#endif